package com.djzhou.gmms.service.menu;

import java.util.List;

import com.djzhou.gmms.model.menu.TbMenu;
import com.djzhou.gmms.model.menu.TbUserMenuConfig;
import com.djzhou.gmms.service.base.BaseService;

public interface MenuService extends BaseService<TbMenu>{
	/**
	 * 通过父级菜单查询子集菜单列表
	 * @param parentId 父级菜单ID 若传0则查询出所有最顶级菜单
	 * @return
	 *
	 */
	List<TbMenu> queryMenuListByParentId(Integer parentId,Integer companyId,Integer departmentId,String roleIds);
	
	/**
	 * 不筛选公司,部门,角色,是否启用,是否删除等条件.
	 * 仅通过父级菜单获取子集菜单列表
	 * @param parentId
	 * @return
	 */
	List<TbMenu> queryMenuListByParentId(Integer parentId);
	
	
	/**
	 * 查询菜单列表
	 * @param companyId 菜单所属公司ID 不属于公司ID则传1
	 * @param departmentId 菜单所属部门ID 不属于部门菜单则传1
	 * @param menuId 菜单ID 若传0则查询部门下所有菜单 传菜单ID则筛除该菜单
	 * @return
	 */
	List<TbMenu> queryList(Integer companyId,Integer departmentId,Integer menuId);
	/**
	 * 添加菜单
	 * @param menu 菜单实体
	 * @param authorityString 权限字符串
	 *
	 */
	void add(TbMenu menu,String authorityString);
	/**
	 * 更新菜单
	 * @param menu 菜单实体
	 * @param authorityString 权限字符串
	 *
	 */
	void update(TbMenu menu, String authorityString);
	/**
	 * 获取历史操作痕迹菜单记录
	 *FOR JEasyFrame
	 * @param menuIds
	 * @return
	 */
	List<TbMenu> queryHistoryMenuList(String menuIds);
	/**
	 * 通过角色获取所有子菜单,作为快捷面板中的apps集合
	 *FOR JEasyFrame
	 * @param companyId
	 * @param departmentId
	 * @param roleIds
	 * @return
	 */
	List<TbMenu> queryApps(Integer companyId,Integer departmentId,String roleIds);
	/**
	 * 通过角色权限筛选最常用菜单
	 *FOR JEasyFrame
	 * @param companyId
	 * @param departmentId
	 * @param roleIds
	 * @return
	 */
	List<TbUserMenuConfig> queryOftenApps(Integer userId,Integer companyId,Integer departmentId,String roleIds);
	/**
	 * 通过父级菜单获得排序编码
	 * @param parentMenuId
	 * @return
	 */
	String queryLevelCodeByParentId(Integer parentMenuId);
	/**
	 * 重置排序字段，目前只支持2级菜单，可以扩展成无限制，临时用
	 */
	void updateResetAllMenuLevelCode();
	/**
	 * 查询菜单列表
	 * @param companyId 菜单所属公司ID 不属于公司ID则传1
	 * @param departmentId 菜单所属部门ID 不属于部门菜单则传1
	 * @param menuId 菜单ID 若传0则查询部门下所有菜单 传菜单ID则筛除该菜单
	 * @return
	 */
	List<TbMenu> queryListForAction(Integer companyId,Integer departmentId,Integer menuId);
	/**
	 * 排序方法
	 * @param sortMenuIds
	 * @param parentMenuId
	 */
	void updateSortMenu(String sortMenuIds,int parentMenuId);
}
